Đăng ký SSE phân tích thị trường mới
URL kết nối:
https://stream.valuescan.ai/stream/market/analysis/subscribe
1. Tổng quan
Phân tích thị trường tổng thể là kết quả ValueAgent tổng hợp đa chiều dữ liệu về diễn biến BTC/ETH/SOL. API này là đăng ký SSE phiên bản enum mới: mỗi 5 phút tạo kết quả phân tích mới rồi đẩy. Trường signal dùng thuật ngữ giao dịch quốc tế (LONG / SHORT / SIDEWAYS), kèm tổng hợp phân bố tín hiệu trong ngày (h24Summary) và xác minh tín hiệu (verdict).
Khác biệt so với /stream/market/subscribe cũ:
| So sánh | Đăng ký phân tích thị trường cũ | Đăng ký SSE phân tích thị trường mới (API này) |
|---|---|---|
| URL đăng ký | /stream/market/subscribe | /stream/market/analysis/subscribe |
| Tên sự kiện | market | market-analysis |
content | Văn bản phân tích thị trường thuần | Chuỗi JSON có cấu trúc, cần parse lần hai |
signal | Không trả về riêng | LONG / SHORT / SIDEWAYS |
| Trường mở rộng | Không có trường mở rộng có cấu trúc | Trả về h24Summary, verdict, verdictDesc và các trường khác |
| Cách cập nhật | Đẩy khi thị trường thay đổi | Đẩy sau khi tạo kết quả phân tích mới mỗi 5 phút |
signalbiểu thị hướng được xác định trong chu kỳ phân tích 5 phút hiện tại. Mỗi chu kỳ trực tiếp trả vềLONG,SHORThoặcSIDEWAYS. Nếu hướng giống chu kỳ trước, vẫn trả về giá trị enum cơ bản tương ứng; không sử dụngLONG_CONTINUE,SHORT_CONTINUEhoặcSIDEWAYS_CONTINUE.
2. URL đăng ký
GET https://stream.valuescan.ai/stream/market/analysis/subscribeTham số xác thực (Query String):
| Tham số | Kiểu | Bắt buộc | Mô tả |
|---|---|---|---|
apiKey | string | Có | ValueScan Access Key |
sign | string | Có | Chữ ký HMAC-SHA256 |
timestamp | long | Có | Unix timestamp tính bằng mili giây |
nonce | string | Có | Chuỗi ngẫu nhiên (chống replay) |
Thuật toán ký:
sign = HMAC-SHA256(SK, timestampMs + nonce)Credits
- Chi phí:
50credits mỗi 30 phút
3. Định dạng sự kiện SSE
Kết nối thành công
event: connected
data: subscribedHeartbeat (duy trì kết nối)
: heartbeat
event: heartbeat
data: pingMáy chủ gửi heartbeat mỗi 20 giây.
Push phân tích thị trường
event: market-analysis
data: {"ts":1775604300144,"uniqueId":"大盘分析_20260408103000","content":"{\"vsTokenId\":\"1\",\"symbol\":\"BTC\",\"signal\":\"SIDEWAYS\",\"price\":\"80573.75\",\"klineDiff\":\"-0.00298373\",\"supports\":[\"80434.275\",\"79980.475\"],\"resistances\":[\"80776.78\",\"81208.86\"],\"analysis\":\"📊 BTC 日内主力资金趋势分析(ValueScan)...\",\"analysisTime\":1778837430000,\"verdict\":0,\"verdictDesc\":\"待验证\",\"h24Summary\":{\"buyCount\":12,\"sellCount\":5,\"holdCount\":7,\"total\":24,\"buyRatio\":50.0,\"sellRatio\":20.8,\"holdRatio\":29.2,\"conclusion\":\"LONG_BIASED_SIDEWAYS\"}}"}Các trường payload sự kiện market-analysis:
| Trường | Kiểu | Mô tả |
|---|---|---|
ts | long | Thời gian push (timestamp mili giây) |
uniqueId | string | Định danh duy nhất (dùng để khử trùng) |
content | string | Chuỗi JSON chi tiết phân tích thị trường, cần parse lần hai |
Cấu trúc trường sau khi parse content:
| Trường | Kiểu | Mô tả |
|---|---|---|
vsTokenId | string | Token ID |
symbol | string | Ký hiệu token (ví dụ BTC, ETH) |
icon | string | URL biểu tượng token |
price | string | Giá tại thời điểm phân tích |
signal | string | Tín hiệu tổng hợp AI trong chu kỳ phân tích 5 phút hiện tại: LONG (tăng giá) / SHORT (giảm giá) / SIDEWAYS (sideway) |
klineDiff | string | Biến động K-line (số thập phân) |
supports | array<string> | Danh sách giá hỗ trợ |
resistances | array<string> | Danh sách giá kháng cự |
analysis | string | Kết luận phân tích AI theo ngôn ngữ yêu cầu |
analysisTime | long | Thời gian phân tích (timestamp mili giây) |
verdict | integer | Xác minh tín hiệu: 0=chờ, 1=khớp, 2=không khớp |
verdictDesc | string | Mô tả xác minh tín hiệu |
h24Summary | object | Tổng hợp phân bố tín hiệu trong ngày |
h24Summary.buyCount | integer | Số lần tăng giá |
h24Summary.sellCount | integer | Số lần giảm giá |
h24Summary.holdCount | integer | Số lần sideway |
h24Summary.total | integer | Tổng số lần |
h24Summary.buyRatio | number | Tỷ lệ tăng giá (%) |
h24Summary.sellRatio | number | Tỷ lệ giảm giá (%) |
h24Summary.holdRatio | number | Tỷ lệ sideway (%) |
h24Summary.conclusion | string | Kết luận tổng hợp trong ngày: LONG (thị trường tăng giá) / SHORT (thị trường giảm giá) / SIDEWAYS (sideway) / LONG_BIASED_SIDEWAYS (sideway thiên tăng) / SHORT_BIASED_SIDEWAYS (sideway thiên giảm) |
4. Đối chiếu enum cũ và mới
| Giá trị cũ (SSE cũ) | Giá trị mới (API này) | Ý nghĩa |
|---|---|---|
| BUY | LONG | Tăng giá |
| SELL | SHORT | Giảm giá |
| HOLD | SIDEWAYS | Sideway |
| BULLISH | LONG | Thị trường tăng giá |
| BEARISH | SHORT | Thị trường giảm giá |
| OSCILLATE | SIDEWAYS | Sideway |
| OSCILLATE_BULLISH | LONG_BIASED_SIDEWAYS | Sideway thiên tăng |
| OSCILLATE_BEARISH | SHORT_BIASED_SIDEWAYS | Sideway thiên giảm |
5. Ví dụ đăng ký
Python
import hashlib
import hmac
import json
import time
import uuid
import urllib.request
from urllib.parse import urlencode
AK = "your-access-key"
SK = "your-secret-key"
ts = int(time.time() * 1000)
nonce = uuid.uuid4().hex
sign = hmac.new(
SK.encode(),
(str(ts) + nonce).encode(),
hashlib.sha256,
).hexdigest()
params = urlencode({
"apiKey": AK,
"sign": sign,
"timestamp": ts,
"nonce": nonce,
})
url = f"https://stream.valuescan.ai/stream/market/analysis/subscribe?{params}"
req = urllib.request.Request(url, headers={"Accept": "text/event-stream"})
with urllib.request.urlopen(req, timeout=300) as resp:
event_name = ""
data_str = ""
for raw in resp:
line = raw.decode("utf-8").rstrip("\r\n")
if line.startswith(":"):
print("♥ heartbeat")
continue
if line == "":
if data_str:
handle_event(event_name, data_str)
event_name = ""
data_str = ""
elif line.startswith("event:"):
event_name = line[6:].strip()
elif line.startswith("data:"):
data_str = line[5:].strip()
def handle_event(event_name: str, data_str: str) -> None:
if event_name == "connected":
print(f"[connected] {data_str}")
elif event_name == "market-analysis":
payload = json.loads(data_str)
content = json.loads(payload["content"])
print(f"[market analysis] {content['symbol']} signal={content['signal']} "
f"price={content['price']} conclusion={content['h24Summary']['conclusion']}")cURL (kiểm tra nhanh)
python3 -c "
import hashlib, hmac, time, uuid, urllib.parse
SK='your-secret-key'
ts=int(time.time()*1000)
nonce=uuid.uuid4().hex
sign=hmac.new(SK.encode(), (str(ts)+nonce).encode(), hashlib.sha256).hexdigest()
params=urllib.parse.urlencode({'apiKey':'your-access-key','sign':sign,'timestamp':ts,'nonce':nonce})
print(f\"curl -N 'https://stream.valuescan.ai/stream/market/analysis/subscribe?{params}' -H 'Accept: text/event-stream'\")
'"6. Kết nối lại
Giống đăng ký thị trường cũ, nên dùng exponential backoff:
def listen_with_retry(url: str, max_retries: int = 10) -> None:
retries = 0
while retries <= max_retries:
try:
req = urllib.request.Request(url, headers={"Accept": "text/event-stream"})
with urllib.request.urlopen(req, timeout=300) as resp:
_read_sse(resp)
break
except KeyboardInterrupt:
print("Người dùng ngắt, thoát.")
break
except Exception as e:
retries += 1
wait = min(2 ** retries, 60)
print(f"Mất kết nối ({e}), thử lại sau {wait}s (lần {retries})...")
time.sleep(wait)
else:
print("Đã hết số lần thử, thoát.")7. Mã lỗi
Trong giai đoạn thiết lập kết nối, lỗi xác thực, tham số và hạn mức có thể trả về HTTP 200 kèm JSON nghiệp vụ. Trường code trong response cho biết lỗi thực tế.
Ví dụ:
{
"code": 20021,
"message": "Signature verification failed",
"data": null,
"requestId": "a7d7ce3053e140dca91d93df173648f8"
}Mã lỗi thường gặp:
| code | Mô tả |
|---|---|
20001 | Thiếu API Key |
20002 | API Key không hợp lệ, bị vô hiệu, hết hạn hoặc chưa được duyệt |
20010 | Thiếu timestamp |
20011 | Định dạng timestamp không hợp lệ |
20012 | Timestamp hết hạn |
20020 | Thiếu chữ ký |
20021 | Xác minh chữ ký thất bại |
40001 | Thiếu tham số bắt buộc |
40002 | Định dạng hoặc giá trị tham số không hợp lệ |
60001 | Vượt giới hạn tần suất |
70001 | Không đủ credits OpenApi |
Sau khi kết nối được thiết lập, nếu không đủ credits sẽ nhận sự kiện credit-exhausted rồi kết nối đóng:
event: credit-exhausted
data: {"message":"额度已耗尽,请充值"}